package ua.kharkiv.karimov.knure.SummaryTask1.Airplanes;

/**
 * Interface which describes the basic functionality of "Airplane"
 * 
 * @author Karimov
 */
public interface Craft {
	/**
	 * It returns codename of aircraft
	 */
	String getCode();

	/**
	 * It returns model of aircraft
	 */
	String getModel();

	/**
	 * Returns the maximum amount of fuel that the aircraft can carry
	 */
	double getMaxFuel();

	/**
	 * Returns the weight of the aircraft
	 */
	double getWeight();

	/**
	 * Returns the max weight of the aircraft
	 */
	double getMaxWeight();

	/**
	 * Returns capacity of the aircraft
	 */
	double getCapacity();

	/**
	 * Returns wingspan of the aircraft
	 */
	double getWingspan();

	/**
	 * Returns the length of the aircraft from nose to tail
	 */
	double getLength();

	/**
	 * Returns height of the aircraft
	 */
	double getHeight();

	/**
	 * Returns the maximum speed that the airplane can develop (no load)
	 */
	double getMaxSpeed();

	/**
	 * Set target airport
	 */
	void setAirportTo(Airport port);

	/**
	 * Returns target airport
	 */
	Airport getAirportTo();

	/**
	 * Sets the start airport
	 */
	void setAirportFrom(Airport port);

	/**
	 * Returns the start airport 
	 */
	Airport getAirportFrom();

	/**
	 * Sets the coordinates of aircraft
	 * @param coordinates 
	 */
	void setCoord(Coord coord);

	/**
	 * Gets the coordinates of aircraft
	 * @param coordinates 
	 */
	Coord getCoord();

	/**
	 * Gets the status of aircraft
	 * @throws Exception if coord null
	 */
	String getStatus() throws Exception;
	
	/**
	 * Create copy of current aircraft
	 * @return copy (without coord and airports)
	 */
	Craft getModelCopy(String code);
	
	/**
	 * Returns a fuel consumption per km
	 */
	double getFuelPerKm();}
